package com.aids_malaria.db.util;

import com.aids_malaria.app.App;
import com.litesuits.orm.LiteOrm;
import com.litesuits.orm.db.assit.QueryBuilder;

import java.util.List;

/**
 * 数据库工具类
 */
public class LiteOrmUtil {

    private static LiteOrm liteOrm;
    private static final String DB_NAME = "DB_AIDS";

    public static LiteOrm getLiteOrm() {
        if (liteOrm == null) {
            synchronized (LiteOrmUtil.class) {
                if (liteOrm == null) {
                    liteOrm = LiteOrm.newCascadeInstance(App.getAppContext(), DB_NAME);
                }
            }
        }
        return liteOrm;
    }

    /**
     * 插入一条数据
     *
     * @param t
     * @param <T>
     * @return
     */
    public static <T> Long insert(T t) {
        return getLiteOrm().save(t);
    }

    /**
     * 插入所有
     *
     * @param list
     * @param <T>
     * @return
     */
    public static <T> int insertAll(List<T> list) {
        return getLiteOrm().save(list);
    }

    /**
     * 查询所有
     *
     * @param clz
     * @param <T>
     */
    public static <T> List<T> queryAll(Class<T> clz) {
        return getLiteOrm().query(clz);
    }

    /**
     * 根据id查询
     *
     * @param id
     * @param t
     * @param <T>
     * @return
     */
    public static <T> T queryById(Long id, Class<T> t) {
        return getLiteOrm().queryById(id, t);
    }

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    public static <T> T queryById(String id, Class<T> t) {
        return getLiteOrm().queryById(id, t);
    }

    /**
     * 删除一条数据
     *
     * @param t
     * @param <T>
     * @return
     */
    public static <T> int delete(T t) {
        return getLiteOrm().delete(t);
    }

    /**
     * 删除一个表
     *
     * @param clz
     * @param <T>
     * @return
     */
    public static <T> int delete(Class<T> clz) {
        return getLiteOrm().delete(clz);
    }

    /**
     * 删除所有
     *
     * @param list
     * @param <T>
     * @return
     */
    public static <T> int deleteAll(List<T> list) {
        return getLiteOrm().delete(list);
    }

    /**
     * 更新数据
     *
     * @param t
     * @param <T>
     * @return
     */
    public static <T> int update(T t) {
        return getLiteOrm().update(t);
    }

    /**
     * 更新所有数据
     *
     * @param list
     * @param <T>
     * @return
     */
    public static <T> int updateAll(List<T> list) {
        return getLiteOrm().update(list);
    }

    /**
     * 模糊查询
     *
     * @param clz   表
     * @param filed 字段
     * @param value 值
     * @param <T>
     * @return
     */
    public static <T> List<T> fuzzyQuery(Class<T> clz, String filed, String value) {
        return getLiteOrm().query(new QueryBuilder<>(clz).where(filed + " LIKE ?","%" + value + "%"));
    }

    /**
     * 某字段=什么值查询
     *
     * @param clz   表
     * @param filed 字段
     * @param value 值
     * @param <T>
     * @return
     */
    public static <T> List<T> whereQuery(Class<T> clz, String filed, String value) {
        return getLiteOrm().query(new QueryBuilder<>(clz).where(filed + " = ?", value));
    }

}
